﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using ClassLib;

namespace Interface.HeThong
{
    public partial class QuanLyUser : Form
    {
        AccessProvider.DataConnection dc = new AccessProvider.DataConnection();
        public QuanLyUser()
        {
            InitializeComponent();
        }

        private void QuanLyUser_Load(object sender, EventArgs e)
        {            
            getUsers();
            cbLoaiUser.Items.Add(string.Empty);
            cbLoaiUser.Items.Add("AD");
            cbLoaiUser.Items.Add("GVU");
            cbLoaiUser.Items.Add("GVIEN");
            loadMon();
        }

        private void loadMon()
        {
            cbMon.Items.Add(string.Empty);
            string sql = "select * from MonHoc";
            DataTable dt = dc.getData(sql);
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow row in dt.Rows)
                {
                    string tenMH = row["TenMH"].ToString();
                    cbMon.Items.Add(tenMH);
                }
            }
        }

        protected void getUsers()
        {
            string sqlQuery = "Select * from Users";
            DataTable dt = dc.getData(sqlQuery);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataRow row = dt.Rows[i];
                int maUser = Convert.ToInt32(row["MaUser"]);
                string userName = row["Username"].ToString();
                string passWord = row["MatKhau"].ToString();
                string hoTen = row["HoTen"].ToString();                               
                string loaiUser = row["LoaiUser"].ToString();
                string tenMH = "";
                string maMH = row["MaMH"]!=null? row["MaMH"].ToString():string.Empty;
                string sqlTenMH = "select TenMH from MonHoc where MaMH='" + maMH + "'";
                if (maMH != string.Empty)
                {
                    tenMH = dc.getStringValue(sqlTenMH);
                }

                //load thông tin của học sinh lên listview
                ClassLib.Users entity = new ClassLib.Users(maUser, userName, passWord, hoTen, loaiUser, tenMH);
                ListViewItem item = new ListViewItem(maUser.ToString());
                item.SubItems.Add(userName);                
                item.SubItems.Add(hoTen);
                item.SubItems.Add(loaiUser);
                item.Tag = entity;
                lvUsers.Items.Add(item);
            }
        }

        private void lvUsers_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvUsers.SelectedItems.Count == 0) 
                return;
            ListViewItem item = lvUsers.SelectedItems[0];

            ClassLib.Users entity = (ClassLib.Users)item.Tag;
            lblUserID.Text = entity.MaUser.ToString();
            txtUN.Text = entity.UserName;
            txtPW.Text = entity.Pw;
            txtHoTen.Text = entity.HoTen;
            cbLoaiUser.Text = entity.LoaiUser;
            string tenMH = entity.TenMH != null ? entity.TenMH.ToString() : string.Empty;
            if (tenMH != string.Empty)
            {
                cbMon.Text = tenMH;
            }
            else
            {
                cbMon.SelectedItem = null;
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (checkTextBox(txtUN,txtPW, txtHoTen) == false)
            {
                MessageBox.Show("Bạn chưa điền vào đầy đủ thông tin", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            string userName = txtUN.Text;
            string passWord = txtPW.Text;
            string hoTen = txtHoTen.Text;
            string loaiUser = cbLoaiUser.Text;
            string tenMH = "";
            string insertQuery = "";
            if (dc.checkUsername(userName)==true)
            {
                MessageBox.Show("Username đã tồn tại", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (loaiUser == "GVIEN")
            {
                if (cbMon.SelectedItem == null)
                {
                    MessageBox.Show("Loại user GVIEN phải có thông tin môn học");
                    return;
                }
                else
                {
                    tenMH = cbMon.Text;
                    string maMH = dc.getStringValue("select MaMH from MonHoc where TenMH=N'" + tenMH + "'");
                    insertQuery = "insert into Users (Username, MatKhau, HoTen, LoaiUser, MaMH) values('{0}','{1}',N'{2}','{3}','{4}')";
                    insertQuery = string.Format(insertQuery, userName, passWord, hoTen, loaiUser, maMH);
                }
            }
            else
            {
                insertQuery = "insert into Users (Username, MatKhau, HoTen, LoaiUser, MaMH) values('{0}','{1}',N'{2}','{3}',null)";
                insertQuery = string.Format(insertQuery, userName, passWord, hoTen, loaiUser);
            }

            //điền thông tin của user vào cơ sở dữ liệu
            
            dc.ExecNonQuery(insertQuery);

            string identityQuery = "select MAX(MaUser) from Users";//lấy ra ID lớn nhất trong bảng Users
            int maUser = dc.getNumberValue(identityQuery);

            Users users = new Users();
            users.MaUser = maUser;
            users.UserName = userName;
            users.Pw = passWord;
            users.HoTen = hoTen;
            users.LoaiUser = loaiUser;
            users.TenMH = tenMH;
            

            //Đưa thông tin của học sinh vừa được thêm lên listview
            ListViewItem item = new ListViewItem(maUser.ToString());               
            item.SubItems.Add(userName);
            item.SubItems.Add(hoTen);
            item.SubItems.Add(loaiUser);

            item.Tag = users;
            lvUsers.Items.Add(item);    
        }
        

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if(lvUsers.SelectedItems.Count<1)            
            {
                MessageBox.Show("Chọn một user để xóa.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            ListViewItem item = lvUsers.SelectedItems[0];
            ClassLib.Users entity = (ClassLib.Users)item.Tag;
            lblUserID.Text = entity.MaUser.ToString();            

            string deleteQuery = "delete from Users where MaUser=" + lblUserID.Text;
            
            dc.ExecNonQuery(deleteQuery);

            //cập nhật lại giao diện
            int position = lvUsers.SelectedIndices[0];
            lvUsers.Items.RemoveAt(position);
            clearTextBox(txtUN, txtPW, txtHoTen);
            if (lvUsers.Items.Count == 0)
                return;
            if (position == lvUsers.Items.Count)
            {
                lvUsers.Items[position - 1].Selected = true;
            }
            else
                lvUsers.Items[position].Selected = true;
        }

        void clearTextBox(params TextBox[] txts)
        {
            foreach (TextBox txt in txts)
                txt.Clear();
        }

        bool checkTextBox(params TextBox[] txts)
        {
            bool isFilled = true;
            foreach (TextBox txt in txts)
            {
                if (txt.Text.Length == 0)
                {
                    isFilled = false;
                }
            }
            return isFilled;
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (lvUsers.SelectedItems.Count==0)
            {
                MessageBox.Show("Chọn một user để sửa.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            int maUser = Convert.ToInt32(lblUserID.Text);
            string userName = txtUN.Text;
            string passWord = txtPW.Text;
            string hoTen = txtHoTen.Text;
            string loaiUser = cbLoaiUser.Text;
            string tenMH= "";
            string updateQuery = "";            

            if (loaiUser == "GVIEN")
            {
                if (cbMon.SelectedItem == null)
                {
                    MessageBox.Show("Loại user GVIEN phải có thông tin môn học");
                    return;
                }
                else
                {
                    tenMH = cbMon.Text;
                    string maMH = dc.getStringValue("select MaMH from MonHoc where TenMH='" + tenMH + "'");
                    updateQuery = "update Users set Username='{0}', MatKhau='{1}', HoTen=N'{2}', LoaiUser='{3}', MaMH='{4}' where MaUser={5}";
                    updateQuery = string.Format(updateQuery, userName, passWord, hoTen, loaiUser, maMH, maUser);

                }
            }
            else
            {
                updateQuery = "update Users set Username='{0}', MatKhau='{1}', HoTen=N'{2}', LoaiUser='{3}' where MaUser={4}";
                updateQuery = string.Format(updateQuery, userName, passWord, hoTen, loaiUser, maUser);
            }
            try
            {
                dc.ExecNonQuery(updateQuery);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Tên đăng nhập này đã tồn tại");
                return;
            }


            //đưa thông tin của học sinh vừa được sửa lên listview
            lvUsers.SelectedItems[0].SubItems[0].Text = maUser.ToString();
            lvUsers.SelectedItems[0].SubItems[1].Text = userName;            
            lvUsers.SelectedItems[0].SubItems[2].Text = hoTen;
            lvUsers.SelectedItems[0].SubItems[3].Text = loaiUser;

            ListViewItem item = lvUsers.SelectedItems[0];
            ClassLib.Users entity = (ClassLib.Users)item.Tag;
            entity.MaUser = maUser;
            entity.UserName = userName;
            entity.Pw = passWord;
            entity.HoTen = hoTen;
            entity.LoaiUser = loaiUser;
            entity.TenMH = tenMH;
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            clearTextBox(txtHoTen, txtUN, txtPW);
            cbMon.SelectedIndex = 0;
            cbLoaiUser.SelectedIndex = 0;
        }
    }
}
